# @Version:1.0
# @Author：green-citrus

# 无序，不重复
# set_a = set() # 创建空集合
# set_b = {1, 2, 3, 4}
# set_c = {'aa', 'bb', 'cc'}

# set_a = {100, 200, 300, 400, 500, 100, 200}
# print(set_a)
#
# print('-' * 30)
# basket = {"apple", "orange", "pear"}
# for e in basket:
#     print(e)

# set_a = set() # 空集合
# set_b = {} # 创建的是字典
# print(f'set_a的类型：{type(set_a)}, set_b的类型{type(set_b)}')

# basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
# # (1) len(集合)：集合元素个数
# print(len(basket)) # 4
#
# # (2) × in s：检测 × 是否为 s 中的成员
# # 需求：判断appLe是否在集合中
# print('apple' in basket) # True
#
# # (3)add(elem)：将元素elem添加到集合中
# # 需求：将grape添加到集合中
# basket.add('grape')
# print(basket) # {'orange', 'apple', 'grape', 'banana', 'pear'}
#
# # (4)remove(elem)：从集合中移除元素elem
# # 如果elem不存在于集合中则会引发KeyError
# # 需求：将appLe从集合删除
# basket.remove('apple')
# print(basket) # {'orange', 'grape', 'banana', 'pear'}
#
# # (5)pop()：从集合中移除并返回任意一个元素
# # 如果集合为空则会引发KeyError
# # 需求：从集合中随机删除一个元素
# basket.pop()
# print(basket)
#
# # (6)union(*others)：返回一个新集合
# # 其中包含来自原集合以及 others 指定的所有集合中的元素
# books = {'天龙八部', '笑傲江湖'}
# books_2 = {'雪山飞狐', '神雕侠侣', '天龙八部'}
# # 需求：将 books 和 books_2进行合集操作［即：求出在 books 集合或者在 books_2集合的元素]
# books_3 = books.union(books_2)
# print(books_3) # {'雪山飞狐', '天龙八部', '神雕侠侣', '笑傲江湖'}
#
# # (7) intersection(others)：返回一个新集合，
# # 其中包含原集合以及 others 指定的所有集合中共有的元素
# # 需求：对 books和 books_2求交集［即：求出既在 books又在 books_2集合的元素]
# books_4 = books.intersection(books_2)
# print(books_4) # {'天龙八部'}
#
#
# # (8)difference(others)：返回一个新集合，相当于求差集
# # 其中包含原集合中在others指定的其他集合中不存在的元素
# books = {'天龙八部', '笑傲江湖'}
# books_2 = {'雪山飞狐', '神雕侠侣', '天龙八部'}
# # 需求：求出只存在 books 集合的元素
# books_5 = books.difference(books_2)
# print(books_5) # {'笑傲江湖'}

# set1 = {ele + ele for ele in "早上好"}
# print(set1) # {'上上', '早早', '好好'}

# 1、用三个集合表示三门学科的选课学生姓名（一个学生可以同时选多门课），
s_history = {'小明', "张三", '李四', "王五", 'Lily', "Bob"}
s_politic = {'小明', "小花", '小红', "二狗"}
s_english = {'小明', 'Lily', "Bob", "Davil", "李四"}

# 求选课学生总共有多少人
'''
    思路分析
    1．对三个集合求并集【自动去重】
    2．对新的集合求Len()
'''
print(len(s_politic | s_english | s_history))

# 求只选了第一个学科的学生数量和学生名字
"""
    思路分析
    1.即求出只在s_history学员
    2．使用差集即可s_history - s_politic - s_english
"""
print(f'有{len(s_history - s_politic - s_english)}个学生只选了第一个学科，他们是{s_history - s_politic - s_english}')

# 求只选了一门学科的学生数量和学生名字
"""
    思路如下：
    1.求出只选择了history的学生
    2.求出只选择了politic的学生
    3.求出只选择了english的学生
    4.然后求并集集合
"""
s1 = s_history - s_english - s_politic
s2 = s_politic - s_history - s_english
s3 = s_english - s_politic - s_history
print(len(s1 | s2 | s3))

# 求选了三门学科的学生数量和学生名字
"""
    思路分析：
    1．求出既在 s_politic 又在 s_history 还在 s_english 中
    2．就是对三个集合求交集
"""
print(len(s_politic & s_politic & s_english), s_politic & s_politic & s_english)
